package xuecheng.tool.mq.alibaba.rocket;

import java.io.Serializable;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.lang.Nullable;

import lombok.*;

/**
 * 自定义 RocketMq 配置属性实体
 *
 * @author PengXueCheng
 * @version 1.0.0
 */
@ConfigurationProperties(prefix = "cpx.rocketmq")
@Data
@NoArgsConstructor
@AllArgsConstructor
class RocketMqProperties implements Serializable {

    /**
     * 是否启用(默认不启用)
     */
    @NonNull
    private Boolean enable;
    /**
     * 鉴权用 AccessKey，在阿里云服务器管理控制台创建
     */
    @NonNull
    private String accessKey;
    /**
     * 鉴权用 AccessKey，在阿里云服务器管理控制台创建
     */
    @NonNull
    private String secretKey;
    /**
     * 设置 TCP 接入域名，进入控制台的实例管理页面，在页面上方选择实例后，在实例信息中的“获取接入点信息”区域查看
     */
    @NonNull
    private String nameServer;
    /**
     * 生产者集合
     */
    @NonNull
    private List<Producer> producers;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode(of = {"group", "nameServer"})
    public static class Producer {

        /**
         * 您在控制台创建的 Group ID
         */
        @NonNull
        private String group;
        /**
         * 设置 TCP 接入域名，进入控制台的实例管理页面，在页面上方选择实例后，在实例信息中的“获取接入点信息”区域查看 可选, 默认为 cpx.rocketmq.nameServer
         */
        @Nullable
        private String nameServer;
        /**
         * 消息发送超时时间，如果服务端在配置的对应时间内未ACK，则发送客户端认为该消息发送失败。单位为毫秒
         */
        private Long sendMsgTimeoutMillis;

    }
}